Digital Signal Processing (DSP) is the mathematical manipulation of digital data streams to either embed or extract information. These streams are typically electromagnetic signals such as radio waves, audio waveforms, and video signals, that have been converted from analog to digital format. DSP techniques are applied in many areas such as finances and statistics, but their primary application is in electronic systems. Common types of DSP applications include communication (e.g. modems, 2-way radios, cellular phones, standard phones, teleconferencing), entertainment (e.g. commercial television and radio, children's toys, video games, CD players, hard disk drives, movie special effects), medical (e.g. hearing aids, heart monitors, diagnostic imaging), military (e.g. RADAR, SONAR, secure communications), industrial (e.g. CAD, voice generation and recognition systems, process monitoring), scientific (e.g. seismic monitoring, resource exploration, simulation, spectral analysis).
Typical DSP algorithms used in the above DSP applications include digital filters, transformations (e.g. discrete Fourier transform, wavelet transform, etc.), modulation and demodulation techniques (e.g. AM, FM, QAM, FSK and other broadcasting techniques, both analog and digital), data encoding/decoding, and encryption/decryption (performed in modems and secure communication systems), image processing (e.g. 2 dimensional filters and transforms, data compression), waveform detection/pattern matching (convolution, correlation, matched filters), other domain specific and miscellaneous algorithms (e.g. squelch and AGC for digital receivers, pulse compression and moving target indication for RADAR, etc.).
DSP algorithms can be implemented either in customized hardware, or on a computer system in software. The software approach is often more flexible and easier to develop, so many DSP systems are implemented in software on general purpose computers or microprocessors. However, DSP algorithms are often computationally intensive, and specialized processors have been developed specifically to implement these algorithms. The specialized processors are often referred to as DSPs, and they are typically orders of magnitude faster for implementing DSP algorithms than a traditional processor would be.
When developing an embedded DSP system, implementation decisions are made based on the system's application and environment. Common factors considered in such decisions include system cost, system size, power requirements, the processor, the primary data format, and programming language to be used. Many DSP systems must be tiny, such as those used in medical implants. Others must be inexpensive, such as those used in consumer electronic devices. These types of applications are usually implemented in 16-bit DSPs because 16-bit DSPs are small, inexpensive, and extremely fast. Few DSP applications can actually be implemented at high speed in 8-bit processors, and 32-bit systems are both larger and more expensive than their 16-bit siblings. However, many applications cannot use 16-bit devices because their primary data formats have reduced dynamic range and increased round-off noise when compared to those of 32-bit device.
There are compelling reasons for programming a DSP in a higher order language, and the C family of languages is predominantly used for programming 16-bit DSPs. However, programming a 16-bit DSP in a higher order language is problematic partially due to the standard numeric formats available in higher order languages. There is no native format in standard C that is very suitable for signal processing on 16 bit machines. For example, the float type is typically implemented using the 32-bit IEEE Standard 754 floating point format (Institute of Electrical and Electronics Engineers [IEEE], 1985). In fact, this format is mandated for floating point in the 1999 standard (ISO, 2003). IEEE 32-bit floating point format is very comprehensive, but potentially very slow. If it is implemented in assembly language on a 16-bit DSP, arithmetic operations can take orders of magnitude longer to execute than equivalent fixed-point operations (Smith, 1999, p. 85), which are implemented directly in hardware.
The C int type maps to a 16-bit twos compliment fixed-point number, and executes very fast. But since DSP algorithms involve a significant number of multiplications, and the product of a 16×16 bit multiplication is a 32-bit number, the int type is highly susceptible to overflow. It also introduces significant noise because it uses truncation rather than rounding, and employs overflow rather than saturation. Finally, it has only limited dynamic range when compared to the float format.
For the reasons stated above, and for reasons that shall become apparent to one of skill in the art, there is a need in the art for a system implementing an improved data format.